/*
 * @Description: 将模板字符串转成tokens
 * @Author: wangqi
 * @Date: 2021-05-05 10:29:51
 * @LastEditTime: 2021-05-08 10:58:58
 */

import Scanner from "./Scanner";
import nestTokens from './nestTokens';

let parseTemplateToTokens = (templateStr) => {
    // 用于收集tokens数据
    let tokens = [];
    let words;
    let scanner = new Scanner(templateStr);
    while (!scanner.eos()) {
        // words 表示 {{ 之前的内容
        words = scanner.scanUtil("{{");
        if (words) {
            tokens.push(["text", words]);
        }

        // 过花括弧
        scanner.scan("{{");

        // words 表示 {{ }} 中间的内容
        words = scanner.scanUtil("}}");
        if (words) {
            // 表示有嵌套对象--开头
            if (words[0] == '#') {
                tokens.push(['#', words.substring(1)]);
                // 表示有嵌套对象--结尾
            } else if (words[0] == '/') {
                tokens.push(['/', words.substring(1)]);
                // 正常数据
            } else {
                tokens.push(["name", words]);
            }

        }

        // 过花括弧
        scanner.scan("}}");

    }
    return nestTokens(tokens);

};

export default parseTemplateToTokens;
